home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2007 January, February, March & April
/
Chip-Cover-CD-2007-02.iso
/
Pakiet bezpieczenstwa
/
mini Pentoo LiveCD 2006.1
/
mpentoo-2006.1.iso
/
livecd.squashfs
/
usr
/
include
/
libol
/
xalloc.h
< prev
Wrap
C/C++ Source or Header
|
2005-10-16
|
3KB
|
109 lines
/***************************************************************************
*
* Copyright (c) 1998-1999 Niels M÷ller
* Copyright (c) 1999 BalaBit Computing
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Id: xalloc.h,v 1.3 1999/07/10 13:23:09 bazsi Exp $
*
***************************************************************************/
#ifndef __XALLOC_H_INCLUDED
#define __XALLOC_H_INCLUDED
#define OL_ALLOC_HEAP 0
#define OL_ALLOC_STATIC 1
#define OL_ALLOC_STACK 2
#define STATIC_HEADER { NULL, NULL, OL_ALLOC_STATIC, 0, 0 }
#define STACK_HEADER { NULL, NULL, OL_ALLOC_STACK, 0, 0 }
struct ol_object *ol_object_alloc(struct ol_class *class);
void ol_object_free(struct ol_object *o);
/* NOTE: This won't work for if there are strings or other instance
* variables that can't be shared. */
struct ol_object *ol_object_clone(struct ol_object *o);
void *ol_space_alloc(size_t size);
void ol_space_free(void *p);
#ifdef DEBUG_ALLOC
#define ol_free debug_free
#define ol_malloc debug_malloc
struct malloc_entry {
void *ptr;
int size;
struct malloc_entry *next;
};
extern struct malloc_entry *first_malloc;
void debug_free(void *p);
struct ol_object *ol_object_check(struct ol_class *class,
struct ol_object *instance);
struct ol_object *ol_object_check_subtype(struct ol_class *class,
struct ol_object *instance);
#define CHECK_TYPE(c, i) \
ol_object_check(&CLASS(c), (struct ol_object *) (i))
#define CHECK_SUBTYPE(c, i) \
ol_object_check_subtype(&CLASS(c), (struct ol_object *) (i))
#define CAST(class, var, o) \
struct class *(var) = (struct class *) CHECK_TYPE(class, o)
#define CAST_SUBTYPE(class, var, o) \
struct class *(var) = (struct class *) CHECK_SUBTYPE(class, o)
#else /* !DEBUG_ALLOC */
#define ol_free free
#define ol_malloc malloc
#define CHECK_TYPE(c, o)
#define CHECK_SUBTYPE(c, o)
#define CAST(class, var, o) \
struct class *(var) = (struct class *) (o)
#define CAST_SUBTYPE(class, var, o) CAST(class, var, o)
#endif /* !DEBUG_ALLOC */
#define NEW(class, var) \
struct class *(var) = (struct class *) ol_object_alloc(&CLASS(class))
#define NEW_SPACE(x) ((x) = ol_space_alloc(sizeof(*(x))))
#define CLONE(class, i) \
((struct class *) ol_object_clone(CHECK_TYPE(class, (i))))
#define CLONED(class, var, i) \
struct class *(var) = CLONE(class, i)
#define KILL(x) gc_kill((struct ol_object *) (x))
void *xalloc(size_t size);
#endif